<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        // 1.JS延迟加载的方式有哪些？（5）
            (1)defer 属性
            (2)js脚本放在body标签的最后面加载
            (3)给js脚本设置定时器

        // 2.前端 JavaScript 中的 ECMAScript、DOM、BOM 的含义；
            ECMAScript-------(ECMA组织制定的一套标准)
            DOM------(document object model，文档对象模型)
            BOM------(brower object model，浏览器对象模型)

        // 3.JavaScript 的数据类型有哪些？
            简单数据类型：String、Number、Boolean、null、undefined、Symbol
            引用数据类型：Function、Array、Object

        // 4.如何进行数据类型的判断？
            (1)typeof
            (2)instanceof
            (3)Object.prototype.toString.call()

        // 5.null 和 undefined 的区别？什么时候会得到 undefined？
            undefined声明变量未加以初始化就会返回undefeated值, 表示空值
            null表示空值， 空对象(不存在的对象)

        // 6.如何理解 null == undefined 返回 true，null === undefined 返回 false？
            null == undefined 判断值, 两者都是空值
            null === undefined 判断值和数据类型

        // 7.使用 continue 或 break 终止循环时，两种方式的区别是？
            continue是跳出当前符合条件的循环进入下一次循环
            break是终止整个循环

        // 8.如何判断字符串内是否包含指定字符？
            (1)indexOf
            (2)lastIndexOf
            (3)includes

        // 9.请尽量列举出数组的方法，并且注明哪些方法会修改原数组，哪些不会；
            修改原数组
                reverse
                splice
                push
                pop
                unshift
                shift
                sort

            不修改原数组
                slice
                concat
                join
                indexOf
                lastIndexOf

        // 10. var、let、const 区别？
            let 、const、var 都可以声明变量
            let、const不支持变量提升，var 支持变量提升
            let、const不支持重复声明，var 支持重复声明
            let、const存在块级作用域，var 不存在块级作用域

        // 12. 如何在 DOM2 级事件绑定上传递参数？
            addEventListener("eventType",callback,boolean);
            eventType 监听指定事件类型
​		         callback 当监听指定的事件被触发的时候，会接收一个事件通知执行回调函数
​		         boolean 默认值false冒泡阶段触发，true捕获阶段触发

        // 13. 怎么阻止事件的进一步传播和默认事件？
            阻止冒泡
            event.stopPropagation() ---正常浏览器通用
            window.event.cancelBubble = true ---IE浏览器

            阻止默认事件
            event.preventDefault() ----正常浏览器使用
            window.event.returnValue = false -----IE浏览器

        // 14. 如何添加一个一次性事件？
            定时器

        // 15. 同步和异步的区别?
            同步是单线程的，一次只能执行任务队列中的一件事
            异步是多线程的，一次可执行任务队列中的多件事

        // 16. AJAX是什么？AJAX是如何为页面注入灵魂？
            Ajax是一种在无需刷新加载整个网页的情况下，能够更新部分网页内容的技术

        // 17. 开发阶段的 AJAX 跨域有哪些解决方法，jsonp 的原理是什么
            后端解决跨域：后端设置响应头，设置白名单
            前端解决跨域：jsonp、正向代理和反向代理

            jsonp 的原理：利用script的src属性，不考虑跨域问题(src属性不需要遵循同源策略，可直接访问服务器)

        // 18. 请描述一下cookies，sessionStorage和localStorage的区别
            cookie：用于存储web页面的用户信息，可以设置cookie过期时间，限制大小为4kb左右
            sessionStorage：用于保存临时同一个窗口的数据，关闭窗口之后数据就会被删除，限制大小在5M左右
            localStorage：用于长久保留整个网页的数据，保存的数据没有过期时间，直到手动去除浏览器缓存，限制大小在5M左右

        // 19. 讲一下常见的异步场景，以及传统异步的诟病和解决方案
            异步场景：定时器、ajax、事件绑定、回调函数

        // 20. 数组如何实现去重？请提供至少2种方法
            (1)indexOf方法
            (2)includes方法
            (3)filter过滤器
            (4)ES6 new set方法    

        // 21. 讲一下对基本数据类型 和 复杂/引用数据类型的理解？
            (1)内存分配不同：基本数据类型存储在栈内存中，引用数据类型存储在堆内存中
            (2)访问机制不同：基本数据类型是按值访问，
            复杂数据类型按引用访问，JS不允许直接访问保存在堆内存中的对象，
            在访问一个对象时，首先得到的是这个对象在堆内存中的地址，
            然后再按照这个地址去获得这个对象中的值。
            (3)复制变量时不同（假设变量赋值a=b）：
            基本数据类型：a=b；是将b中保存的原始值的副本赋值给新变量a，a和b完全独立，互不影响
            复杂数据类型：a=b；将b保存的对象内存的引用地址赋值给了新变量a；
            a和b指向了同一个堆内存地址，其中一个值发生了改变，另一个也会改变。
            (4)参数传递的不同（实参/形参）:
            函数传参都是按值传递（栈中的存储的内容）：基本数据类型，拷贝的是值；
            复杂数据类型，拷贝的是引用地址

        // 22. this 的指向如何确定？
        // 23. 谈谈对垃圾回收机制的认识
        // 24. 什么是回流重绘，如何进行优化？
        // 25. 请解释什么是事件代理
            事件代理的实现原理是利用冒泡和目标元素，把处理的事件添加到父元素，等待子元素事件的冒泡，
            并且可以通过父元素event.target判断哪个是子元素，从而做出处理

        // 26. 谈谈你对渐进增强和优雅降级的理解(补充)
    </script>
</body>

</html>